package com.bookocean.application.service;

import com.bookocean.controller.dto.BookDto;
import com.bookocean.controller.dto.BookQuoteDto;
import com.bookocean.domain.dto.BookCoverDto;
import com.bookocean.domain.service.BookDomainService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 书籍应用服务
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
@Service
@RequiredArgsConstructor
public class BookApplicationService {

    private final BookDomainService bookDomainService;


    public BookDto getBookInfoByName(String title) {
        return bookDomainService.getBookInfoByName(title);
    }

    /**
     * 根据书名模糊搜索书籍列表
     * 
     * @param title 书名关键词
     * @return 书籍列表
     */
    public List<BookDto> searchBooksByName(String title) {
        return bookDomainService.searchBooksByName(title);
    }

    public BookDto saveBookInfo(BookDto bookDto) {
        return bookDomainService.saveBookInfo(bookDto);
    }

    public BookDto getBookById(Long bookId) {
        return bookDomainService.getBookById(bookId);
    }

    /**
     * 根据书籍ID查询增强的书籍信息（包含统计数据和用户交互状态）
     * 
     * @param bookId 书籍ID
     * @param userId 当前用户ID（用于查询用户交互状态，可为null）
     * @return 增强的书籍信息
     */
    public BookDto getEnhancedBookById(Long bookId, Long userId) {
        return bookDomainService.getEnhancedBookById(bookId, userId);
    }

    public BookQuoteDto saveQuoteInfo(BookQuoteDto bookQuoteDto) {
        return bookDomainService.saveQuoteInfo(bookQuoteDto);
    }

    /**
     * 获取我的书摘列表
     */
    public List<BookQuoteDto> getUserQuotes(Integer page, Integer pageSize, Long userId) {
        return bookDomainService.getUserQuotes(page, pageSize, userId);
    }

    /**
     * 根据类型获取封面素材列表
     * 
     * @param imageType 图片类型
     * @param userId 用户ID
     * @return 封面素材列表
     */
    public BookCoverDto[] getCoversByType(Integer imageType, String userId) {
        return bookDomainService.getCoversByType(imageType, userId);
    }

    /**
     * 保存封面素材
     * 
     * @param coverDto 封面素材信息
     * @return 保存后的封面素材
     */
    public BookCoverDto saveCover(BookCoverDto coverDto) {
        return bookDomainService.saveCover(coverDto);
    }
}
